#!/bin/bash

mark() {
	sed -n -e 's/^ //
	p
	${
	s/^.*$/\n\n/
	p}' |sed -n -e '1,1 {
:cycle
H
s/^[^\n].*$//
t next
b leave
:next
N
s/\n//
t m
:m
b cycle
:leave
s/^.*\n/^\n/
H
x
s|^\n|<!DOCTYPE html>\n<html>\n<head>\n    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\n    <title>|
s|\([^\n]\)\n*$|\1</title>\n</head>\n<body>|
p
d
}

s/  */ /g
s/^ //
s/ $//

/^\* /{
b paragraph
:listret
s|^\* |<ul><li>|
:list
N
s|\*\([^\* \n][^\* \n]*\)\*|<em>\1</em>|g
s|\[\([^\n\[][^\n\[]*\)\](\([^ \n][^ \n]*\))|<a href="\2">\1</a>|g
s|\[\([^\n\[][^\n\[]*\)\](\([^ \n][^ \n]*\) "\([^"][^"]*\)")|<a href="\2" title="\3">\1</a>|g
/\n$/ {
      s|\n$|</li></ul>|
      p
      d
    }
/\n\* / {
      s|\n\* |\n</li><li>|
    }
b list
}

/^ *==* *$/!{
	/^ *--* *$/! H
}
/^ *==* *$/{
H
s|^.*$||
x
/[^\n]/{
	s/^/<h1>/
	s/<h1>\n*/<h1>/
	s|\n* *==* *$|</h1>|
	$b eof
	p
    }
} 

/^ *--* *$/{
H
s|^.*$||
x
/[^\n]/{
	s/^/<h2>/
	s/<h2>\n*/<h2>/
	s|\n* *--* *$|</h2>|
	$b eof
	p
    }
} 

/^$/{
H
:paragraph
x
s|^\n*||
s|\n*$||
s|\*\([^\* ][^\* ]*\)\*|<em>\1</em>|g
s|\[\([^\n\[][^\n\[]*\)\](\([^ \n][^ \n]*\))|<a href="\2">\1</a>|g
s|\[\([^\n\[][^\n\[]*\)\](\([^ \n][^ \n]*\) "\([^"][^"]*\)")|<a href="\2" title="\3">\1</a>|g
/[^\n]/{
	s|^|<p>|
	s|$|</p>|
	x
	/^\* /{
	    x
	    p
	    s/^.*$//
	    x
	    b listret
        }
	x
	$b eof
	p
    }
x
/^\* /b listret
x
$b eof
} 

${
s/^.*$//
H
b paragraph
:eof
s/\([^\n]\)$/\1\n/
s|$|</body>\n</html>|
p
d
}
'
}

fin="/dev/stdin"
fout="/dev/stdout"
while getopts ":i:o:" a 
do 
	case "$a" in
		i)
			fin="$OPTARG"
			;;
		o)
			fout="$OPTARG"
			;;
	esac
done
if [[ $fin == '-' ]] ; then
	fin='/dev/stdin'	
fi
if [[ $fout == '-' ]]; then
	fout='/dev/stdout'

fi
a=" "$(cat "$fin")
echo "$a" | mark > "$fout"



